package cn.ware.house.interfaces.mapper.prodctmapper;

import cn.ware.house.interfaces.entity.goods.Product;
import cn.ware.house.interfaces.entity.goods.ProductStyle;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

/**
 * 商品数据访问接口，定义了对商品信息表（product表）进行数据库操作的方法。
 * 通过MyBatis框架，这些方法会映射到对应的SQL语句，实现与数据库的交互。
 */
@Mapper
public interface ProductMapper {
    // 分页查询商品信息
    List<Product> selectProductsByPage(int offset, int limit);

    // 根据商品编号查询商品信息
    Product selectProductById(Integer productId);

    // 插入商品信息
    int insertProduct(Product product);

    // 根据商品编号更新商品信息
    int updateProductById(Product product);

    // 根据商品编号删除商品信息
    int deleteProductById(Integer productId);

    // 获取商品总记录数（用于分页计算总页数等）
    int countProducts();

    /**
     * 根据商品编号查询该商品的所有样式信息。
     *
     * @param productId 商品编号。
     * @return 该商品对应的样式信息列表。
     */
    List<ProductStyle> selectStylesByProductId(Integer productId);

    /**
     * 根据商品编号以及传入的样式集合，更新该商品的样式信息。
     * 操作逻辑为先删除该商品原有的所有样式记录，再插入新传入的样式记录。
     *
     * @param productId 商品编号。
     * @param styles 新的样式信息集合。
     * @return 受影响的行数，用于判断更新操作是否成功。
     */
    int updateProductStylesById(Integer productId, List<ProductStyle> styles);


    /**
     * 根据商品编号删除该商品的所有样式记录。
     *
     * @param productId 商品编号。
     * @return 受影响的行数，用于判断删除操作是否成功。
     */
    int deleteProductStylesById(Integer productId);
}